#!/bin/bash
###############################################################################
# @用例ID: 20230526-210453-407180875
# @用例名称: tar_test
# @用例级别: 3
# @用例标签:
# @用例类型: 功能
###############################################################################
[ -z "$TST_TS_TOPDIR" ] && {
    TST_TS_TOPDIR="$(realpath "$(dirname "$0")/..")"
    export TST_TS_TOPDIR
}
source "${TST_TS_TOPDIR}/tst_common/lib/common.sh" || exit 1
###############################################################################

g_tmpdir="$(mktemp -d)"

tc_setup() {
    msg "this is tc_setup"
    # @预置条件:
    # @预置条件:
    return 0
}


do_test() {
    msg "this is do_test"

    # 创建一个临时目录
    tmpdir="$(mktemp -d)"

    # 在临时目录中创建一些文件和目录
    mkdir "${tmpdir}/testdir"
    echo "Hello, World!" >> "${tmpdir}/testdir/file.txt"
    mkdir "${tmpdir}/testdir/subdir"
    echo "This is a subdirectory" >> "${tmpdir}/testdir/subdir/subfile.txt"

    # @测试步骤:1
    # 使用 tar 命令将目录压缩为 tar 包
    assert_true tar -czf "${tmpdir}/archive.tar.gz" -C "${tmpdir}/testdir" .

    # @预期结果:1
    # 确保压缩的 tar 包成功创建

    # @测试步骤:2
    # 使用 tar 命令解压缩 tar 包
    assert_true tar -xzf "${tmpdir}/archive.tar.gz" -C "${tmpdir}"

    # @预期结果:2
    # 确保 tar 包成功解压缩并还原了原始的文件和目录结构

    # @测试步骤:3
    # 使用 tar 命令列出 tar 包中的文件
    assert_true tar -tf "${tmpdir}/archive.tar.gz"

    # @预期结果:3
    # 确保 tar 包中的文件列表与预期的文件列表匹配

    # @测试步骤:4
    # 使用 tar 命令仅解压缩 tar 包中的一个文件
    assert_true tar -xzf "${tmpdir}/archive.tar.gz" -C "${tmpdir}" testdir/file.txt

    # @预期结果:4
    # 确保只有指定的文件被解压缩，其他文件未被解压缩

    # @测试步骤:5
    # 使用 tar 命令更新已存在的 tar 包
    assert_true tar -uf "${tmpdir}/archive.tar.gz" -C "${tmpdir}/testdir" subdir/subfile.txt

    # @预期结果:5
    # 确保指定的文件被添加到已存在的 tar 包中

    # @测试步骤:6
    # 使用 tar 命令从 tar 包中删除一个文件
    assert_true tar --delete -f "${tmpdir}/archive.tar.gz" testdir/file.txt

    # @预期结果:6
    # 确保指定的文件被从 tar 包中删除

    # 删除临时目录
    assert_true rm -rf "${tmpdir}"

    return 0
}




tc_teardown() {
    msg "this is tc_teardown"
    rm -rfv "$g_tmpdir" || return 1
    return 0
}

###############################################################################
tst_main "$@"
###############################################################################
